#!/bin/bash
# 统一Git提交管理工具 - 支持Windows/Mac/Linux (依赖Git Bash)

# 默认日志级别为INFO
LOG_LEVEL=${LOG_LEVEL:-INFO}

# 日志函数
echo_log() {
    local log_message="$1"
    # 提取日志级别，如果没有指定则默认为INFO
    local level=$(echo "$log_message" | sed -E 's/.*\[(DEBUG|INFO|WARNING|ERROR)\].*/\1/')
    level=${level:-INFO}
    
    # 比较日志级别，决定是否输出
    case $LOG_LEVEL in
        DEBUG)
            # 输出所有级别的日志
            ;;  
        INFO)
            # 只输出INFO/WARNING/ERROR级别的日志
            if [ "$level" = "DEBUG" ]; then
                return
            fi
            ;;
        WARNING)
            # 只输出WARNING/ERROR级别的日志
            if [ "$level" = "DEBUG" ] || [ "$level" = "INFO" ]; then
                return
            fi
            ;;
        ERROR)
            # 只输出ERROR级别的日志
            if [ "$level" != "ERROR" ]; then
                return
            fi
            ;;
    esac
    
    local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
    echo "[$timestamp] $log_message"
}

# 后台任务管理函数
start_background_task() {
    local bg_script="$SCRIPT_DIR/plugins/background_task.sh"
    local bg_pid_file="/tmp/background_task.pid"
    
    # 检查后台任务是否已在运行
    if [ -f "$bg_pid_file" ]; then
        local bg_pid=$(cat "$bg_pid_file")
        if kill -0 "$bg_pid" 2>/dev/null; then
            echo_log "[INFO] 后台任务已在运行 (PID: $bg_pid)"
            return 0
        fi
    fi
    
    # 检查后台任务脚本是否存在
    if [ ! -f "$bg_script" ]; then
        echo_log "[WARNING] 后台任务脚本不存在: $bg_script"
        return 1
    fi
    
    # 确保脚本可执行
    chmod +x "$bg_script" 2>/dev/null || true
    
    # 启动后台任务
    echo_log "[INFO] 启动后台任务..."
    nohup "$bg_script" > /tmp/background_task.log 2>&1 &
    local bg_pid=$!
    
    # 保存PID
    echo "$bg_pid" > "$bg_pid_file"
    echo_log "[INFO] 后台任务已启动 (PID: $bg_pid)"
    
    return 0
}

# 清理后台进程的函数
cleanup_background_processes() {
    echo_log "[INFO] 开始清理后台进程..."
    
    # 清理后台任务进程
    local bg_pid_file="/tmp/background_task.pid"
    if [ -f "$bg_pid_file" ]; then
        local bg_pid=$(cat "$bg_pid_file")
        if kill -0 "$bg_pid" 2>/dev/null; then
            echo_log "[INFO] 终止后台任务进程 (PID: $bg_pid)"
            kill -TERM "$bg_pid" 2>/dev/null || true
            sleep 1
            # 如果进程还在，强制终止
            if kill -0 "$bg_pid" 2>/dev/null; then
                kill -KILL "$bg_pid" 2>/dev/null || true
            fi
        fi
        rm -f "$bg_pid_file"
    fi
    
    # 清理gcm触发信号文件
    rm -f /tmp/gcm_trigger 2>/dev/null || true
    
    # 清理其他可能的后台shell脚本进程
    echo_log "[INFO] 清理其他后台shell脚本进程..."
    local script_names=("background_task.sh" "repo_commit.sh" "trans_crlf_to_lf.sh" "trans_lf_to_crlf.sh")
    
    for script_name in "${script_names[@]}"; do
        local pids=$(pgrep -f "$script_name" 2>/dev/null || true)
        if [ -n "$pids" ]; then
            for pid in $pids; do
                if [ "$pid" != "$$" ]; then  # 不要终止自己
                    echo_log "[INFO] 终止 $script_name 进程 (PID: $pid)"
                    kill -TERM "$pid" 2>/dev/null || true
                fi
            done
        fi
    done
    
    echo_log "[INFO] 后台进程清理完成"
    return 0
}

# 立即执行repo_commit.sh的函数
execute_repo_commit_immediately() {
    local commit_content="$*"
    
    # 检查repo_commit.sh是否存在
    if [ ! -f "$REPO_COMMIT_SCRIPT" ]; then
        echo_log "[ERROR] 找不到提交脚本: $REPO_COMMIT_SCRIPT"
        return 1
    fi
    
    # 确保脚本可执行
    chmod +x "$REPO_COMMIT_SCRIPT" 2>/dev/null || true
    
    # 清理可能存在的旧触发信号
    rm -f /tmp/gcm_trigger 2>/dev/null || true
    
    # 触发后台任务的立即执行信号
    echo_log "[INFO] 发送立即执行信号到后台任务..."
    touch /tmp/gcm_trigger
    
    # 等待一小段时间让后台任务响应信号
    sleep 1
    
    # 立即执行提交脚本
    if [ -z "$commit_content" ]; then
        echo_log "[INFO] 立即执行repo_commit.sh（无参数）..."
        "$REPO_COMMIT_SCRIPT"
    else
        echo_log "[INFO] 立即执行repo_commit.sh（参数: $commit_content）..."
        "$REPO_COMMIT_SCRIPT" "$commit_content"
    fi
    
    local exit_code=$?
    
    # 清理触发信号文件
    rm -f /tmp/gcm_trigger 2>/dev/null || true
    
    return $exit_code
}

# 聊天室监控函数
monitor_chat_rooms() {
    echo_log "[INFO] 开始监控主站和副站聊天室在线用户..."
    
    # 定义主站和副站的API地址
    local primary_url="https://2025.task2030.xyz/api/chat/monitor/online-users"
    local backup_url="https://zjnh.yamhk.top/api/chat/monitor/online-users"
    
    # 创建临时文件存储上一次的用户数据
    local primary_temp_file="/tmp/chat_monitor_primary_prev_data.txt"
    local backup_temp_file="/tmp/chat_monitor_backup_prev_data.txt"
    local primary_current_file="/tmp/chat_monitor_primary_current_data.txt"
    local backup_current_file="/tmp/chat_monitor_backup_current_data.txt"
    
    # 初始化上一次的数据（如果不存在）
    if [ ! -f "$primary_temp_file" ]; then
        echo "{}" > "$primary_temp_file"
    fi
    
    if [ ! -f "$backup_temp_file" ]; then
        echo "{}" > "$backup_temp_file"
    fi
    
    while true; do
        # 获取主站当前在线用户数据
        local primary_response
        primary_response=$(curl -s -m 10 -w "%{http_code}" -X GET "$primary_url" -H "accept: application/json" 2>/dev/null)
        local primary_http_code="${primary_response: -3}"
        local primary_json_data="${primary_response%???}"
        
        # 获取副站当前在线用户数据
        local backup_response
        backup_response=$(curl -s -m 10 -w "%{http_code}" -X GET "$backup_url" -H "accept: application/json" 2>/dev/null)
        local backup_http_code="${backup_response: -3}"
        local backup_json_data="${backup_response%???}"
        
        # 处理主站数据
        if [ "$primary_http_code" = "200" ]; then
            # 保存当前数据
            echo "$primary_json_data" > "$primary_current_file"
            
            # 比较当前数据和上一次的数据
            local primary_diff_result
            primary_diff_result=$(diff "$primary_temp_file" "$primary_current_file" 2>/dev/null)
            
            if [ -n "$primary_diff_result" ]; then
                echo_log "[INFO] 主站检测到在线用户列表发生变化"
                
                # 解析新增的用户和主题
                # 这里使用jq工具来处理JSON数据（需要安装jq）
                if command -v jq >/dev/null 2>&1; then
                    # 获取当前所有主题
                    local primary_topics
                    primary_topics=$(echo "$primary_json_data" | jq -r '.data | keys[]' 2>/dev/null)
                    
                    # 遍历每个主题
                    for topic in $primary_topics; do
                        # 获取该主题下的用户数量
                        local user_count
                        user_count=$(echo "$primary_json_data" | jq -r ".data[\"$topic\"] | length" 2>/dev/null)
                        
                        # 确保user_count是数字
                        if [ -n "$user_count" ] && [ "$user_count" -ge 0 ] 2>/dev/null; then
                            if [ "$user_count" -gt 0 ]; then
                                echo_log "[INFO] 主站主题 '$topic' 有 $user_count 个用户在线"
                                
                                # 检查是否是新主题（通过比较上一次数据）
                                # 使用jq提取之前数据中的主题
                                local prev_topics
                                prev_topics=$(cat "$primary_temp_file" | jq -r '.data | keys[]' 2>/dev/null || echo "")
                                
                                # 检查当前主题是否在之前的数据中存在
                                local topic_exists_in_prev=false
                                if [ -n "$prev_topics" ]; then
                                    for prev_topic in $prev_topics; do
                                        if [ "$prev_topic" = "$topic" ]; then
                                            topic_exists_in_prev=true
                                            break
                                        fi
                                    done
                                fi
                                
                                # 如果主题在之前的数据中不存在，则是新主题
                                if [ "$topic_exists_in_prev" = false ]; then
                                    echo_log "[INFO] 主站检测到新主题 '$topic'，正在打开页面..."
                                    open_chat_topic_page "$topic" "primary"
                                fi
                            fi
                        else
                            echo_log "[WARNING] 无法解析主站用户数量: $user_count"
                        fi
                    done
                else
                    echo_log "[WARNING] 未安装jq工具，无法解析JSON数据"
                fi
                
                # 更新上一次的数据
                cp "$primary_current_file" "$primary_temp_file"
            else
                echo_log "[DEBUG] 主站在线用户列表无变化"
            fi
        else
            echo_log "[WARNING] 获取主站在线用户数据失败 (HTTP状态码: $primary_http_code)"
        fi
        
        # 处理副站数据
        if [ "$backup_http_code" = "200" ]; then
            # 保存当前数据
            echo "$backup_json_data" > "$backup_current_file"
            
            # 比较当前数据和上一次的数据
            local backup_diff_result
            backup_diff_result=$(diff "$backup_temp_file" "$backup_current_file" 2>/dev/null)
            
            if [ -n "$backup_diff_result" ]; then
                echo_log "[INFO] 副站检测到在线用户列表发生变化"
                
                # 解析新增的用户和主题
                # 这里使用jq工具来处理JSON数据（需要安装jq）
                if command -v jq >/dev/null 2>&1; then
                    # 获取所有主题
                    local backup_topics
                    backup_topics=$(echo "$backup_json_data" | jq -r '.data | keys[]' 2>/dev/null)
                    
                    # 遍历每个主题
                    for topic in $backup_topics; do
                        # 获取该主题下的用户数量
                        local user_count
                        user_count=$(echo "$backup_json_data" | jq -r ".data[\"$topic\"] | length" 2>/dev/null)
                        
                        # 确保user_count是数字
                        if [ -n "$user_count" ] && [ "$user_count" -ge 0 ] 2>/dev/null; then
                            if [ "$user_count" -gt 0 ]; then
                                echo_log "[INFO] 副站主题 '$topic' 有 $user_count 个用户在线"
                                
                                # 检查是否是新主题（通过比较上一次数据）
                                # 使用jq提取之前数据中的主题
                                local prev_topics
                                prev_topics=$(cat "$backup_temp_file" | jq -r '.data | keys[]' 2>/dev/null || echo "")
                                
                                # 检查当前主题是否在之前的数据中存在
                                local topic_exists_in_prev=false
                                if [ -n "$prev_topics" ]; then
                                    for prev_topic in $prev_topics; do
                                        if [ "$prev_topic" = "$topic" ]; then
                                            topic_exists_in_prev=true
                                            break
                                        fi
                                    done
                                fi
                                
                                # 如果主题在之前的数据中不存在，则是新主题
                                if [ "$topic_exists_in_prev" = false ]; then
                                    echo_log "[INFO] 副站检测到新主题 '$topic'，正在打开页面..."
                                    open_chat_topic_page "$topic" "backup"
                                fi
                            fi
                        else
                            echo_log "[WARNING] 无法解析副站用户数量: $user_count"
                        fi
                    done
                else
                    echo_log "[WARNING] 未安装jq工具，无法解析JSON数据"
                fi
                
                # 更新上一次的数据
                cp "$backup_current_file" "$backup_temp_file"
            else
                echo_log "[DEBUG] 副站在线用户列表无变化"
            fi
        else
            echo_log "[WARNING] 获取副站在线用户数据失败 (HTTP状态码: $backup_http_code)"
        fi
        
        # 等待30秒后再次检查
        sleep 30
    done
}

# 打开聊天主题页面函数
open_chat_topic_page() {
    local topic="$1"
    local site_type="$2"  # primary 或 backup
    
    if [ -n "$topic" ]; then
        local base_url
        if [ "$site_type" = "primary" ]; then
            base_url="https://2025.task2030.xyz/module/index/mx_chat.html"
        else
            base_url="https://zjnh.yamhk.top/module/index/mx_chat.html"
        fi
        
        local url="${base_url}?topic=${topic}"
        echo_log "[INFO] 打开${site_type}站聊天主题页面: $url"
        
        # 根据操作系统类型打开浏览器
        case "$OS_TYPE" in
            Darwin*)
                # macOS
                open "$url" 2>/dev/null || echo_log "[ERROR] 无法打开浏览器"
                ;;
            Linux*)
                # Linux
                if command -v xdg-open >/dev/null 2>&1; then
                    xdg-open "$url" 2>/dev/null || echo_log "[ERROR] 无法打开浏览器"
                else
                    echo_log "[ERROR] 未找到浏览器打开命令"
                fi
                ;;
            MINGW*|CYGWIN*|MSYS*)
                # Windows
                cmd //c start "" "$url" 2>/dev/null || echo_log "[ERROR] 无法打开浏览器"
                ;;
            *)
                echo_log "[ERROR] 不支持的操作系统: $OS_TYPE"
                ;;
        esac
    fi
}

# 设置脚本目录
# 处理符号链接和别名调用的情况
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do
    DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
    SOURCE="$(readlink "$SOURCE")"
    [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
done
SCRIPT_DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
REPO_COMMIT_SCRIPT="$SCRIPT_DIR/plugins/repo_commit.sh"

# 检查操作系统类型
OS_TYPE="$(uname -s)"
IS_WINDOWS=false
if [[ "$OS_TYPE" == MINGW* || "$OS_TYPE" == CYGWIN* || "$OS_TYPE" == MSYS* ]]; then
    IS_WINDOWS=true
fi

# 设置工作目录
if [ -z "$AWS" ]; then
    if [ -n "$HOME" ]; then
        export AWS="$HOME/workspace"
    elif [ "$IS_WINDOWS" = true ]; then
        export AWS="C:/Users/Administrator/workspace"
    else
        export AWS="/home/workspace"
    fi
fi

# 启动后台任务（除非明确禁用）
if [ "$DISABLE_BACKGROUND_TASK" != "true" ]; then
    start_background_task
fi

# 处理GCM命令 - 立即执行模式
if [ "$1" = "gcm" ]; then
    shift

    # 立即执行repo_commit.sh，不受后台任务影响
    echo_log "[INFO] 收到gcm命令，立即执行repo_commit.sh..."
    if execute_repo_commit_immediately "$@"; then
        echo_log "[INFO] repo_commit.sh执行完成"
        exit 0
    else
        exit_code=$?
        echo_log "[ERROR] repo_commit.sh执行失败 (退出码: $exit_code)"
        exit $exit_code
    fi

# 处理本地HTML部署并打开主页命令
elif [ "$1" = "local" ]; then
    echo_log "[INFO] 收到local命令，执行本地HTML部署..."
    
    # 执行goHtmlLocal.sh脚本
    html_script="$SCRIPT_DIR/plugins/goHtmlLocal.sh"
    if [ -f "$html_script" ]; then
        # 确保脚本可执行
        chmod +x "$html_script" 2>/dev/null || true
        
        # 执行脚本
        "$html_script"
        exit_code=$?
        
        if [ $exit_code -eq 0 ]; then
            echo_log "[INFO] 本地HTML部署完成"
        else
            echo_log "[ERROR] 本地HTML部署失败 (退出码: $exit_code)"
            exit $exit_code
        fi
    else
        echo_log "[ERROR] 找不到本地HTML部署脚本: $html_script"
        exit 1
    fi
    
    # 从TODAY_TOPIC.MD文件中读取网页地址
    TOPIC_FILE="$SCRIPT_DIR/../docs/TODAY_TOPIC.MD"
    if [ -f "$TOPIC_FILE" ]; then
        # 使用sed提取Markdown链接中的URL部分
        WEB_URL=$(sed -n 's/.*\](\([^)]*\)).*/\1/p' "$TOPIC_FILE")
        
        if [ -n "$WEB_URL" ]; then
            echo_log "[INFO] 从TODAY_TOPIC.MD读取到网页地址: $WEB_URL"
        else
            echo_log "[WARNING] 无法从TODAY_TOPIC.MD文件中提取有效的网页地址"
            echo_log "[INFO] 使用默认网页地址: http://localhost?t=000&p=001001001&topic=30000000"
            WEB_URL="http://localhost?t=000&p=001001001&topic=30000000"
        fi
    else
        echo_log "[WARNING] 找不到TODAY_TOPIC.MD文件: $TOPIC_FILE"
        echo_log "[INFO] 使用默认网页地址: http://localhost?t=000&p=001001001&topic=30000000"
        WEB_URL="http://localhost?t=000&p=001001001&topic=30000000"
    fi
    
    # 检测操作系统类型
    case "$OS_TYPE" in
        Darwin*)
            # macOS
            echo_log "[INFO] 在macOS上打开 $WEB_URL"
            open "$WEB_URL"
            ;;
        Linux*)
            # Linux
            if command -v xdg-open >/dev/null 2>&1; then
                echo_log "[INFO] 在Linux上使用xdg-open打开 $WEB_URL"
                xdg-open "$WEB_URL"
            elif command -v gnome-open >/dev/null 2>&1; then
                echo_log "[INFO] 在GNOME上使用gnome-open打开 $WEB_URL"
                gnome-open "$WEB_URL"
            elif command -v kde-open >/dev/null 2>&1; then
                echo_log "[INFO] 在KDE上使用kde-open打开 $WEB_URL"
                kde-open "$WEB_URL"
            else
                echo_log "[ERROR] 无法找到合适的浏览器打开命令"
                echo "请手动打开: $WEB_URL"
                exit 1
            fi
            ;;
        MINGW*|CYGWIN*|MSYS*)
            # Windows (Git Bash/Cygwin/MSYS2)
            echo_log "[INFO] 在Windows上打开 $WEB_URL"
            cmd //c start "" "$WEB_URL"
            ;;
        *)
            echo_log "[ERROR] 不支持的操作系统: $OS_TYPE"
            echo "请手动打开: $WEB_URL"
            exit 1
            ;;
    esac
    
    if [ $? -eq 0 ]; then
        echo_log "[INFO] 已成功打开 $WEB_URL"
    else
        echo_log "[ERROR] 打开 $WEB_URL 失败"
        exit 1
    fi
    
    exit 0

# 处理配置更新和打包命令
elif [ "$1" = "cuw" ]; then
    echo_log "[INFO] 收到cuw命令，执行配置更新和打包..."
    
    # 执行config_update_packaging.sh脚本
    cuw_script="$SCRIPT_DIR/plugins/config_update_packaging.sh"
    if [ -f "$cuw_script" ]; then
        # 确保脚本可执行
        chmod +x "$cuw_script" 2>/dev/null || true
        
        # 设置必要的环境变量并执行脚本
        export HOME="$HOME"
        export WORKSPACE="${HOME}/workspace"
        export DEMO_ROOT="${WORKSPACE}/demo"
        export DEPLOY="${WORKSPACE}/preDeploy"
        
        # 执行脚本
        "$cuw_script"
        exit_code=$?
        
        if [ $exit_code -eq 0 ]; then
            echo_log "[INFO] 配置更新和打包完成"
        else
            echo_log "[ERROR] 配置更新和打包失败 (退出码: $exit_code)"
        fi
        
        exit $exit_code
    else
        echo_log "[ERROR] 找不到配置更新和打包脚本: $cuw_script"
        exit 1
    fi

# 处理mac部署命令
elif [ "$1" = "mac" ]; then
    echo_log "[INFO] 收到mac命令，执行macOS部署..."
    
    # 执行doDeployMac.sh脚本
    mac_script="$SCRIPT_DIR/plugins/doDeployMac.sh"
    if [ -f "$mac_script" ]; then
        # 确保脚本可执行
        chmod +x "$mac_script" 2>/dev/null || true
        
        # 执行脚本
        "$mac_script"
        exit_code=$?
        
        if [ $exit_code -eq 0 ]; then
            echo_log "[INFO] macOS部署完成"
        else
            echo_log "[ERROR] macOS部署失败 (退出码: $exit_code)"
        fi
        
        exit $exit_code
    else
        echo_log "[ERROR] 找不到macOS部署脚本: $mac_script"
        exit 1
    fi

# 处理linux部署命令
elif [ "$1" = "linux" ]; then
    echo_log "[INFO] 收到linux命令，执行Linux部署..."
    
    # 执行doDeployLinux.sh脚本
    linux_script="$SCRIPT_DIR/plugins/doDeployLinux.sh"
    if [ -f "$linux_script" ]; then
        # 确保脚本可执行
        chmod +x "$linux_script" 2>/dev/null || true
        
        # 执行脚本
        "$linux_script"
        exit_code=$?
        
        if [ $exit_code -eq 0 ]; then
            echo_log "[INFO] Linux部署完成"
        else
            echo_log "[ERROR] Linux部署失败 (退出码: $exit_code)"
        fi
        
        exit $exit_code
    else
        echo_log "[ERROR] 找不到Linux部署脚本: $linux_script"
        exit 1
    fi

# 处理打开x.html页面命令
elif [ "$1" = "index" ]; then
    echo_log "[INFO] 收到index命令，从TODAY_TOPIC.MD读取网页地址..."
    
    # 从TODAY_TOPIC.MD文件中读取网页地址
    TOPIC_FILE="$SCRIPT_DIR/../docs/TODAY_TOPIC.MD"
    if [ -f "$TOPIC_FILE" ]; then
        # 使用sed提取Markdown链接中的URL部分
        WEB_URL=$(sed -n 's/.*\](\([^)]*\)).*/\1/p' "$TOPIC_FILE")
        
        if [ -n "$WEB_URL" ]; then
            echo_log "[INFO] 从TODAY_TOPIC.MD读取到网页地址: $WEB_URL"
        else
            echo_log "[WARNING] 无法从TODAY_TOPIC.MD文件中提取有效的网页地址"
            echo_log "[INFO] 使用默认网页地址: http://localhost/?t=001"
            WEB_URL="http://localhost/?t=001"
        fi
    else
        echo_log "[WARNING] 找不到TODAY_TOPIC.MD文件: $TOPIC_FILE"
        echo_log "[INFO] 使用默认网页地址: http://localhost/?t=001"
        WEB_URL="http://localhost/?t=001"
    fi
    
    # 检测操作系统类型并打开网页
    case "$OS_TYPE" in
        Darwin*)
            # macOS
            echo_log "[INFO] 在macOS上打开 $WEB_URL"
            open "$WEB_URL"
            ;;
        Linux*)
            # Linux
            if command -v xdg-open >/dev/null 2>&1; then
                echo_log "[INFO] 在Linux上使用xdg-open打开 $WEB_URL"
                xdg-open "$WEB_URL"
            elif command -v gnome-open >/dev/null 2>&1; then
                echo_log "[INFO] 在GNOME上使用gnome-open打开 $WEB_URL"
                gnome-open "$WEB_URL"
            elif command -v kde-open >/dev/null 2>&1; then
                echo_log "[INFO] 在KDE上使用kde-open打开 $WEB_URL"
                kde-open "$WEB_URL"
            else
                echo_log "[ERROR] 无法找到合适的浏览器打开命令"
                echo "请手动打开: $WEB_URL"
                exit 1
            fi
            ;;
        MINGW*|CYGWIN*|MSYS*)
            # Windows (Git Bash/Cygwin/MSYS2)
            echo_log "[INFO] 在Windows上打开 $WEB_URL"
            cmd //c start "" "$WEB_URL"
            ;;
        *)
            echo_log "[ERROR] 不支持的操作系统: $OS_TYPE"
            echo "请手动打开: $WEB_URL"
            exit 1
            ;;
    esac
    
    if [ $? -eq 0 ]; then
        echo_log "[INFO] 已成功打开 $WEB_URL"
    else
        echo_log "[ERROR] 打开 $WEB_URL 失败"
        exit 1
    fi
    
    exit 0

# 处理后端部署命令
elif [ "$1" = "back" ]; then
    echo_log "[INFO] 收到back命令，执行后端部署..."
    
    # 执行doDeployBackendMac.sh脚本
    backend_script="$SCRIPT_DIR/plugins/doDeployBackendMac.sh"
    if [ -f "$backend_script" ]; then
        # 确保脚本可执行
        chmod +x "$backend_script" 2>/dev/null || true
        
        # 执行脚本
        "$backend_script"
        exit_code=$?
        
        if [ $exit_code -eq 0 ]; then
            echo_log "[INFO] 后端部署完成"
        else
            echo_log "[ERROR] 后端部署失败 (退出码: $exit_code)"
        fi
        
        exit $exit_code
    else
        echo_log "[ERROR] 找不到后端部署脚本: $backend_script"
        exit 1
    fi

# 处理聊天室监控命令
elif [ "$1" = "monitor" ]; then
    echo_log "[INFO] 收到monitor命令，启动聊天室监控..."
    
    # 检查是否已安装jq工具
    if ! command -v jq >/dev/null 2>&1; then
        echo_log "[ERROR] 未安装jq工具，无法解析JSON数据"
        echo_log "[INFO] 请先安装jq工具:"
        echo_log "  macOS: brew install jq"
        echo_log "  Ubuntu/Debian: sudo apt-get install jq"
        echo_log "  CentOS/RHEL: sudo yum install jq"
        exit 1
    fi
    
    # 清理之前的临时文件
    rm -f /tmp/chat_monitor_*
    
    # 启动聊天室监控
    monitor_chat_rooms
    exit 0

# 处理Python服务部署到BWG服务器命令
elif [ "$1" = "bkl" ]; then
    echo_log "[INFO] 收到bkl命令，执行Python服务部署到BWG服务器..."
    
    # 执行deploy_python_bwg.sh脚本
    bkl_script="$SCRIPT_DIR/plugins/deploy_python_bwg.sh"
    if [ -f "$bkl_script" ]; then
        # 确保脚本可执行
        chmod +x "$bkl_script" 2>/dev/null || true
        
        # 执行脚本
        "$bkl_script"
        exit_code=$?
        
        if [ $exit_code -eq 0 ]; then
            echo_log "[INFO] Python服务部署到BWG服务器完成"
        else
            echo_log "[ERROR] Python服务部署到BWG服务器失败 (退出码: $exit_code)"
        fi
        
        exit $exit_code
    else
        echo_log "[ERROR] 找不到Python服务部署脚本: $bkl_script"
        exit 1
    fi

# 处理退出命令
elif [ "$1" = "q" ] || [ "$1" = "quit" ] || [ "$1" = "exit" ]; then
    echo_log "[INFO] 收到退出命令，正在清理后台进程..."
    
    # 清理后台进程
    cleanup_background_processes
    
    echo_log "[INFO] 程序退出完成"
    exit 0

# 处理杀死所有Java进程命令
elif [ "$1" = "kill" ]; then
    echo_log "[INFO] 收到kill命令，正在杀死所有Java进程..."
    
    # 查找并杀死所有Java进程
    pids=$(pgrep -f java)
    
    if [ -z "$pids" ]; then
        echo_log "[INFO] 没有找到正在运行的Java进程"
    else
        echo_log "[INFO] 找到以下Java进程 PID: $pids"
        kill $pids
        if [ $? -eq 0 ]; then
            echo_log "[INFO] 成功发送终止信号给所有Java进程"
        else
            echo_log "[ERROR] 杀死Java进程时出现错误"
            exit 1
        fi
    fi
    
    exit 0

# 显示帮助信息
elif [ "$1" = "--help" ] || [ "$1" = "-h" ]; then
    if [ "$IS_WINDOWS" = true ]; then
        echo "用法: go.sh [gcm|local|cuw|mac|linux|index|back|monitor|bkl|q/quit/exit] [参数]"
        echo ""
        echo "命令:"
        echo "  gcm [<提交消息>]     - 使用repo_commit.sh提交所有仓库的更改"
        echo "  local                 - 执行本地HTML部署(goHtmlLocal.sh)并打开主页 http://localhost?t=000&p=001001001&topic=30000000"
        echo "  cuw                   - 执行配置更新和打包(config_update_packaging.sh)"
        echo "  mac                   - 执行macOS部署(doDeployMac.sh)"
        echo "  linux                 - 执行Linux部署(doDeployLinux.sh)"
        echo "  index                 - 从TODAY_TOPIC.MD读取并打开网页地址"
        echo "  back                  - 执行后端部署(doDeployBackendMac.sh)"
        echo "  monitor               - 启动聊天室监控，检测新用户并自动打开主题页面"
        echo "  bkl                   - 部署Python服务到BWG服务器"
        echo "  kill                  - 杀死所有Java进程"
        echo "  q/quit/exit          - 退出程序并清理所有后台进程"
        echo ""
        echo "说明:"
        echo "  依赖Git Bash运行，请确保已安装Git"
        echo "  如果未提供提交消息，将从README.md读取"
        echo "  启动时会自动运行后台任务(background_task.sh)"
        echo ""
        echo "环境变量:"
        echo "  DISABLE_BACKGROUND_TASK=true  禁用后台任务启动"
        echo "  deploy                       - 设置HTML部署源目录路径"
        echo ""
        echo "示例:"
        echo "  go.sh gcm "修复bug""
        echo "  set GCM_MSG="复杂的提交消息" && go.sh gcm %GCM_MSG%"
        echo "  go.sh gcm"
        echo "  set DISABLE_BACKGROUND_TASK=true && go.sh gcm"
        echo "  set deploy=/path/to/html && go.sh local"
        echo "  go.sh cuw"
        echo "  go.sh mac"
        echo "  go.sh back"
        echo "  go.sh monitor"
        echo "  go.sh bkl"

    else
        echo "用法: ./go.sh [gcm|local|cuw|mac|linux|index|back|monitor|bkl|kill|q/quit/exit] [参数]"
        echo ""
        echo "命令:"
        echo "  gcm [<提交消息>]     - 使用repo_commit.sh提交所有仓库的更改"
        echo "  local                 - 执行本地HTML部署(goHtmlLocal.sh)并打开主页 http://localhost?t=000&p=001001001&topic=30000000"
        echo "  cuw                   - 执行配置更新和打包(config_update_packaging.sh)"
        echo "  mac                   - 执行macOS部署(doDeployMac.sh)"
        echo "  linux                 - 执行Linux部署(doDeployLinux.sh)"
        echo "  index                 - 从TODAY_TOPIC.MD读取并打开网页地址"
        echo "  back                  - 执行后端部署(doDeployBackendMac.sh)"
        echo "  monitor               - 启动聊天室监控，检测新用户并自动打开主题页面"
        echo "  bkl                   - 部署Python服务到BWG服务器"
        echo "  kill                  - 杀死所有Java进程"
        echo "  q/quit/exit          - 退出程序并清理所有后台进程"
        echo ""
        echo "说明:"
        echo "  使用repo_commit.sh提交所有仓库的更改"
        echo "  如果未提供提交消息，将从README.md读取"
        echo "  启动时会自动运行后台任务(background_task.sh)"
        echo ""
        echo "环境变量:"
        echo "  DISABLE_BACKGROUND_TASK=true  禁用后台任务启动"
        echo "  deploy                       - 设置HTML部署源目录路径"
        echo ""
        echo "示例:"
        echo "  ./go.sh gcm "修复bug""
        echo "  export GCM_MSG="复杂的提交消息" && ./go.sh gcm $GCM_MSG"
        echo "  ./go.sh gcm"
        echo "  DISABLE_BACKGROUND_TASK=true ./go.sh gcm"
        echo "  export deploy=/path/to/html && ./go.sh local"
        echo "  ./go.sh cuw"
        echo "  ./go.sh mac"
        echo "  ./go.sh back"
        echo "  ./go.sh monitor"
        echo "  ./go.sh bkl"
        echo "  ./go.sh kill"
    fi
    exit 0

# 错误处理
else
    if [ -z "$1" ]; then
        echo_log "[ERROR] 请指定命令"
    else
        echo_log "[ERROR] 未知命令: $1"
    fi
    echo "输入 'go.sh --help' 获取帮助信息"
    exit 1
fi

# 如果脚本执行到这里，说明是正常退出
echo_log "[INFO] go.sh执行完成"
exit 0